from django.http import HttpResponse
from django.shortcuts import render
from book.models import BookInfo
# Create your views here.

def index(request):
    books = BookInfo.objects.all()

    context={
        'books':books
    }
    return HttpResponse('index')

#增加数据方式一：
# book=BookInfo(
#     name='python',
#     pub_data='2000-01-01'
# )
# book.save()
# 增加数据方式二：
# BookInfo.objects.create(
#     name='java',
#     pub_data='2010-01-01'
# )

# 修改

# from book.models import BookInfo
# 第一种方式：先获取
# book=BookInfo.objects.get(id=5)
# book.read_count=1
# book.save()
# 第二种方式：调用filter，直接更新
# BookInfo.objects.filter(id=5).update(
#     read_count=100
# )
# BookInfo.objects.filter(id=5).delete()

# 删除
# from book.models import BookInfo
# 第一种方法
# book=BookInfo.objects.get(id=5)
# book.delete()

# 第二种方法
# BookInfo.objects.filter(id=6).delete()

# 基本查询
# get 得到一个数据
# all 获取所有
# count 个数

# 返回一个
# book=BookInfo.objects.get(id=1)
# 如果不存在会报 BookInfo.DoesNotExist的异常
# 返回所有
# book=BookInfo.objects.all()

#统计个数，两种方式返回的结果是一样的
# BookInfo.objects.count()
# BookInfo.objects.all().count()

# filter,get,exclude 查询，相当于where查询
# filter：筛选过滤，返回N个结果
# get：返回一个结果
# exclude：排除掉符合条件剩下的结果
# 语法都相同形式：
# 以filter(字段名__运算符=值)

# 举例：

# 查询编号为1的图书
# exact精确
# BookInfo.objects.get(id=1)
# BookInfo.objects.get(id__exact=1)
# BookInfo.objects.filter(id__exact=1)

# 查询书名包含'湖'的图书
# BookInfo.objects.filter(name__contains='湖')

# 查询书名以'部'结尾的图书
# BookInfo.objects.filter(name__endswith='部')

# 查询书名为空的图书
# BookInfo.objects.filter(name__isnull=True)

# 查询编号为1或3或5的图书
# BookInfo.objects.filter(id__in=[1,3,5])

# 查询编号大于3的图书
# gt 大于
# gte 大于等于
# lt 小于
# lte 小于等于
# BookInfo.objects.filter(id__gt=3)

# 查询1980年发表的图书
# BookInfo.objects.filter(pub_data__year='1980')

# 查询1990年1月1日后发表的图书 日期必须是YYYY-MM-DD
# BookInfo.objects.filter(pub_data__gt='1990-1-1')


#F对象 处理字段比较问题
# from book.models import BookInfo
# from django.db.models import F
# BookInfo.objects.filter(read_count__gt=F('comment_count')*2)

# Q对象 处理OR问题
# 方式1 两次filter
# BookInfo.objects.filter(id__gt=2).filter(read_count__gt=20)

# 方式二
# BookInfo.objects.filter(id__gt=2,read_count__gt=20)

# from django.db.models import Q
# Q()|Q()
# Q()&Q()
# ~Q()   也就是not
# BookInfo.objects.filter(Q(id__gt=2)|Q(read_count__gt=40))


# 聚合函数
# Sum max min avg count
# aggregate(函数('字段'))
# from django.db.models import Sum,Max,Min,Avg,Count
# BookInfo.objects.aggregate(Sum('read_count'))

# 排序 默认升序 降序是在字段前加-
# BookInfo.objects.all().order_by('-read_count')

# 关联查询
from book.models import PeopleInfo
# book = BookInfo.objects.get(id=1)
# book.peopleinfo_set.all()

# peo=PeopleInfo.objects.get(id=1)
# peo.book.name

# BookInfo.objects.filter(peopleinfo__name__exact='郭靖')
# BookInfo.objects.filter(peopleinfo__description__contains='八')

# PeopleInfo.objects.filter(book__name='天龙八部')
# PeopleInfo.objects.filter(book__read_count__gt=30)

# 查询集
# [book.id for book in BookInfo.objects.all()]
# 性能优化代码
# books=BookInfo.objects.all()
# [book.id for book in books]

# 限制查询结果集，可以做列表的切片
# books=BookInfo.objects.all()[0:2]
# [book.id for book in books]

# 分页的实现pagination
from django.core.paginator import Paginator
books=books=BookInfo.objects.all()
p=Paginator(books,2)
bookspage=p.page(1)
bookspage[0]